<?php


namespace app\admin\controller;


use app\admin\model\Role;
use app\BaseController;
use think\App;
use think\facade\View;
use think\exception\HttpResponseException;

/**
 * 初始化控制器
 *
 * Class Base
 * @package app\admin\controller
 */
class Base extends BaseController
{

    public $err_msg = '操作失败';

    /**
     * 初始化
     *
     * @return array|void
     */
    public function initialize()
    {

        if (empty(session('username')) || empty(session('id'))) {

            $loginUrl = url('login/index');

            if (request()->isAjax()) {
                return msg(111, $loginUrl, '登录超时');
            }

            // 官方send方法未处理返回 这里直接中断即可
            // 后续要重定向参考此处
            redirect((string)$loginUrl)->send();
            exit();
        }

        // 检查缓存
        $this->cacheCheck();

        // 检测权限
        $control = lcfirst(request()->controller());
        $action  = lcfirst(request()->action());

        if (empty(authCheck($control . '/' . $action))) {
            if (request()->isAjax()) {
                return msg(403, '', '您没有权限');
            }

            $this->error('403 您没有权限');
        }

        View::assign([
            'head'     => session('head'),
            'username' => session('username'),
            'rolename' => session('role')
        ]);

    }

    /**
     * 检查缓存
     */
    private function cacheCheck(): void
    {
        $action = cache(session('role_id'));

        if (is_null($action) || empty($action)) {

            // 获取该管理员的角色信息
            $roleModel = new Role();
            $info      = $roleModel->getRoleInfo(session('role_id'));
            cache(session('role_id'), $info['action']);
        }
    }

    /**
     * 清除缓存
     */
    protected function removeRoleCache(): void
    {
        $roleModel = new Role();
        $roleList  = $roleModel->getRole();

        foreach ($roleList as $value) {
            cache($value['id'], null);
        }
    }
}